package reflect;

import java.io.File;
import java.net.FileNameMap;
import java.net.URISyntaxException;

public class Test6 {
    public static void main(String[] args) throws URISyntaxException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        //获取当前类Test6的包名
        Class c = Test6.class;
        String pack = c.getPackage().getName();
        /*
            思路:
            1:定位Test6.class文件所在的目录(该目录就是Test6所在的包)
            2:利用File的API可以获取该目录下的所有.class文件
            3:java命名规则要求:类名与它对应的字节码文件的名字一致
              好比Person类的字节码文件应当叫:Person.class
              因此我们通过每个class文件的文件名就能得知对应的类名
            4:利用Class.forName加载这个类
            5:通过类对象实例化
         */
        File dir = new File(Test6.class.getResource(".").toURI());
        File[] subs = dir.listFiles();
        System.out.println(subs.length);
        for(File sub : subs){
            String fileName = sub.getName();//文件名，例如:Driver.class
            String className= fileName.replace(".class","");

            Class cls = Class.forName(pack+"."+className);
            //5实例化
            System.out.println("实例化类:"+className);
            Object o = cls.newInstance();
            System.out.println(o);
        }
        }

    }

